package cn.yulr.http;

import org.apache._http.HttpRequest;
import org.apache._http.HttpResponse;
import org.apache._http.protocol.HttpContext;

/**
 * 请求响应结束监听器
 * <p>
 * 在一次 request 结束之后，将通过此部分回调来通知
 */
public interface HttpRequestActionListener {

    /**
     * 收到其他部分发送过来的 HTTP 请求内容
     * 此部分时，响应数据尚未执行写入操作
     * 可以提前写入部分需要写入的数据内容
     * <p>
     * 如果 返回 true，则表示，不需要其他部分来修改 response 的内容
     * 返回 false，则其他部分仍然执行修改
     * <p>
     * 判断依据，如果有任何一个回调接口 返回 true，表示 不需要 HttpRequestAsyncRequestHander 部分执行操作
     *
     * @param requestAction 请求 Action
     * @param httpRequest   请求头信息
     * @param httpResponse  准备响应的内容信息
     * @param context       上下文内容
     */
    boolean onHttpRequestAction(String requestAction, HttpRequest httpRequest, HttpResponse httpResponse, HttpContext context);

    /**
     * 响应数据内容写入
     * 准备发送前，调用此部分方法
     *
     * @param requestAction 请求 Action
     * @param httpRequest   请求头信息
     * @param httpResponse  响应的内容信息
     * @param context       上下文内容
     */
    void onHttpRequestActionPreSend(String requestAction, HttpRequest httpRequest, HttpResponse httpResponse, HttpContext context);

    /**
     * 某次请求结束之后，将会回调此方法
     * 来通知上层，当前服务器成功响应了记录
     * <p>
     * 注：此部分可能无法获取部分数据内容
     *
     * @param requestAction 请求 Action
     * @param httpRequest   请求内容，根据请求类型来决定
     * @param httpResponse  请求响应内容
     * @param context       上下文内容
     */
    void onHttpRequestActionFinished(String requestAction, HttpRequest httpRequest, HttpResponse httpResponse, HttpContext context);

}
